import { download, get, post } from '@/service/request'

// 获取订单分页数据
export function getOrderTableData(params?: Partial<SearchParams>) {
  return get<PageDataResponse<OrderData>>('/lxdd/supplyWabill/supplyWabillPageList', params)
}
// 获取订单分页数据
export function exportOrderTableData(data: Partial<SearchParams>) {
  return download({ url: '/lxdd/supplyWabill/supplyWabillPageList', data: { ...data, export: true } })
}
// 获取单个订单详情
export function getOrderDetailData(params: { id: string }) {
  return get<OrderDetail>('/lxdd/supplyWabill/getSupplyWabillById', params)
}

// 变更订单状态
export function changeOrderStatusRequest(params: Pick<OrderData, 'id' | 'waybillStatus'>) {
  return post('/lxdd/supplyWabill/modifyWaybillStatus', params)
}

// 变更异常状态
export function changeExpStatusRequest(params: { expStatus: 1 | 2; id: string }) {
  return post('/lxdd/supplyWabill/modifyExpStatus', params)
}

export function getProcessingOrderData(params: Partial<SearchParams>) {
  return get<PageDataResponse<OrderDetail>>('/lxdd/supplyWabill/inTransitSupplyWabillPageList', params)
}
// 查询去程运单车辆的实时定位
export function getOutBoundCarData(params: { waybillCode: string }) {
  return get('/lxdd/supplyWabill/getOutBoundCarPositionList', params)
}
// 查询当前用户表头
export function getUserTableHeaders(params: { routeName: string }) {
  return get('/upms/menuHeaderConfig/findCurrUserMenuHeader', params)
}
// 设置当前用户表头
export function setUserTableHeaders(data: { routeName: string; headerCtx: string }) {
  return post('/upms/menuHeaderConfig/addOrModifyCurrUserMenuHeader', data)
}

export interface SearchParams extends PageQuery {
  waybillCodeFuzzy: string //  订单编号(模糊)
  customerNameFuzzy: string
  engineeringNameFuzzy: string
  buildPlaceFuzzy: string
  actualDeliveryAddressFuzzy: string // 客户地址
  mixingStationCode: string // 搅拌站编号
  waybillStatus: 0 | 1 | 2 | 3 | 4 // 订单状态: 0.新建 1.暂挂 2.启用 3.完成 4.取消
  expStatus: 1 | 2 // 异常状态: 1正常 2异常
  timeType: 1 | 2 // 查询时间类型:1预计开盘时间；2实际开盘时间
  startTime: string
  endTime: string
}

export interface OrderData {
  id: string // id
  waybillCode: string // 订单编号
  mixingStationName: string // 销售站点
  customerName: string // 客户名称
  engineeringName: string // 工程名称
  averageDeliveryMin: string // 预估送货时长(分钟) 字符串数字
  averageReturnTripMin: string // 平均返程时长(分钟) 字符串数字
  actualEngineeringName: string // 实际工程名称
  actualDeliveryAddress: string // 实际送货地址
  reserveVolume: number // 订货量[方]
  deliveredVolume: string // 已送量
  buildPlace: string // 施工部位
  concreteStrengthGrade: string // 强度等级
  specialRequirements: string // 特殊要求
  concreteSlump: string // 塌落度
  unloadWay: string // 卸料方式
  productionLine: string // 产线
  contractCode: string // 合同编号
  saleMan: string // 销售员
  contactPerson: string // 联系人
  contactPhone: string // 联系人电话
  launchTime: string // 预计开盘时间
  actualLaunchTime: string // 实际开盘时间
  remark: string // 订单备注
  waybillStatus: 0 | 1 | 2 | 3 | 4 // 订单状态: 0.新建 1.暂挂 2.启用 3.完成 4.取消
  outBoundCarNum: number // 在途车辆
  expStatus: 1 | 2 // 异常状态: 1正常 2异常
  expOrderCodeList: string | string[] // 异常运单
  receiveAddress: string // 卸货地址
}

export interface Vehicle {
  id: string // 运单主键ID
  carCode: string // 搅拌车号
  carNumber: string
  orderStatus: number //  0 | 1 | 2 | 3 | 4 | 5 // 状态: 0装货中 1送货中 2待卸货(等待中) 3卸货中 4待签收 5已签收
  expStatus: 1 | 2 // 异常状态: 1正常 2异常
  arriveTime?: string // 预计送达时间
  progress?: number // 送货进度，预估时长完成百分比
  gpsTime: string // 设备定位时间 空代表无定位
  online: 0 | 1 // 设备状态 0离线（更新时间超过10分钟，判定离线） 1在线
}

export type SendVehicle = Vehicle & {
  leaveTime: string // 离厂时间只有去程车辆有
}

export type ReturnVehicle = Vehicle & {
  unloadEndTime: string // 离厂时间只有去程车辆有
}

export type OrderDetail = Pick<
  OrderData,
  | 'id'
  | 'waybillStatus' // 订单状态: 0未开始 1未完成 2已完成
  | 'unloadWay' // 卸料方式
  | 'waybillCode' // 订单编号
  | 'productionLine' // 产线
  | 'mixingStationName' // 销售站点
  | 'contractCode' // 合同编号
  | 'customerName' // 客户名称
  | 'saleMan' // 销售员
  | 'engineeringName' // 工程名称
  | 'contactPerson' // 联系人
  | 'actualEngineeringName' // 实际工程名称
  | 'contactPhone' // 联系人电话
  | 'actualDeliveryAddress' // 实际送货地址
  | 'launchTime' // 预计开盘时间
  | 'reserveVolume' // 订货量[方]
  | 'actualLaunchTime' // 实际开盘时间
  | 'deliveredVolume' // 已送量
  | 'remark' // 订单备注
  | 'buildPlace' // 施工部位
  | 'outBoundCarNum' // 在途车辆
  | 'concreteStrengthGrade' // 强度等级
  | 'expStatus' // 异常状态: 1正常 2异常
  | 'specialRequirements' // 特殊要求
  | 'expOrderCodeList' // 异常运单
  | 'concreteSlump' // 塌落度
  | 'receiveAddress' // 卸货地址
  | 'averageDeliveryMin'
  | 'averageReturnTripMin'
> & {
  averageUnloadingMin: number // 平均卸货时长(分钟)
  outBoundCarList: SendVehicle[] // 去程车辆,格式：车号-车牌号-异常状态-运单主键ID,多个用英文逗号隔开
  enhanceOutBoundCarList?: SendVehicle[] // 增强转换后的去程车辆
  outBoundCarNum: number // 去程车辆数量(辆)
  returnCarList: ReturnVehicle[] // 返程车辆,格式：车号-车牌号-异常状态-运单主键ID,多个用英文逗号隔开
  enhanceReturnCarList?: ReturnVehicle[] // 增强转换后的返程车辆
  returnCarNum: number // 返程车辆数量(辆)
  mixingStationCode: string // 搅拌站编号
  inDeliveryNum: number // 送货中车辆数量
  inDeliveryCarList: string // 送货中车辆编码,格式：中文'、'隔开
  waitingNum: number // 等待中数量
  waitingCarList: string //	等待中车辆编码,格式：中文'、'隔开
  unloadingNum: number // 卸货中数量
  unloadingCarList: string // 卸货中车辆编码,格式：中文'、'隔开
  departureOrder: string // 发车顺序
}
